#ifndef _BSP_DWT_H
#define _BSP_DWT_H

#include <stdint.h>
#include "main.h"

typedef struct
{
    uint32_t s;
    uint16_t ms;
    uint16_t us;
} DWT_Time_t;

/**
 * @brief  初始化DWT
 * 
 * @param  CPU_Freq_mHz: CPU频率(MHz) c板为168MHz
 */
void DWT_Init(uint32_t CPU_Freq_mHz);

/**
 * @brief  获取两次调用之间的时间间隔
 * 
 * @param cnt_last: 上一次的时间
 * @return float 时间间隔
 */
float DWT_GetDeltaT(uint32_t *cnt_last);

/**
 * @brief  获取两次调用之间的时间间隔
 * 
 * @param cnt_last: 上一次的时间
 * @return double 时间间隔
 */
double DWT_GetDeltaT64(uint32_t *cnt_last);

/**
 * @brief 获取当前时间,单位为秒
 *
 * @return float 时间轴
 */
float DWT_GetTimeline_s(void);

/**
 * @brief 获取当前时间,单位为毫秒
 *
 * @return float
 */
float DWT_GetTimeline_ms(void);

/**
 * @brief 获取当前时间,单位为微秒
 *
 * @return float
 */
uint64_t DWT_GetTimeline_us(void);

/**
 * @brief 延时函数
 * 
 * @param Delay: 延时时间,单位为秒
 */
void DWT_Delay(float Delay);

/**
 * @brief 更新时间轴
 * 
 * @param void
 */
void DWT_SysTimeUpdate(void);
#endif 
